from odoo import http, api
from odoo.http import request
import json
import requests
from flask import Flask, jsonify



class DemoController(http.Controller):


    @http.route("/api/demo1", auth="user", type="json", csrf=True, methods=["POST"], website=False)
    def demo1(self, **kwargs):
        """  注释格式【大概】
             说明：物料发生新建/变更，向sap接口传值

             key：计算接口token，pdm配置里配置
             iv：计算接口token，pdm配置里配置
             sapurl：接口访问路径，pdm配置里配置

            :param str atype: 更新类型 【’A‘：新增】【’M‘：修改】
                       xxx：xxxx

            :return str {Code	消息代码，0表示成功，1表示业务逻辑错误，2表示系统错误
                           Msg	消息描述
                           ObjId	对象ID，当消息代码为0时，此字段有值，表示当前操作对象的唯一ID（创建的单据编号，物料编号等）}
                    如访问接口失败，则返回 false
        """

        # 如为json数据
        data = request.jsonrequest
        # data.get('name', False)

        # 业务逻辑

        # request.env['xxx.xxxx'].sudo().create({})
        # request.env['xxx.xxxx'].sudo().write({})
        #                                    ...

        # 返回结果------------------------------------------------------------
        # 示例数据
        data = {
            "name": "John Doe",
            "age": 30,
            "is_active": True,
            "interests": ["coding", "hiking", "reading"]
        }

        return jsonify(data)  # 自动处理序列化和内容类型设置





    # 获取登录认证和csrf 认证  python 例子
    url = 'http://我们的odoo访问地址/web/session/authenticate'
    payload = {
        'jsonrpc': '2.0',
        'params': {
            'db': 'your_db_name',
            'login': 'your_username',
            'password': 'your_password'
        }
    }

    # 进行登录请求
    response = requests.post(url, json=payload)

    if response.status_code == 200:
        session_info = response.json()
        session_id = session_info['result']['session_id']
        csrf_token = session_info['result']['csrf_token']  # 获取 CSRF token
        print('Logged in successfully:', session_id)

        # 将拿到的数据放入 请求头
        headers = {
            'X-CSRF-Token': csrf_token,  # CSRF token
            'Cookie': f'session_id={session_id}'  # 会话 ID
        }

        # 再用请求头进行请求，此为 GET 请求
        protected_response = requests.get('xxxxxxx/web/xxcvs/demo1', headers=headers)

    else:
        print('Login failed:', response.text)








